怎么做好互联网公司的技术负责人?(下)
请回复 leader 查看上下两篇文章
5. 培训计划
在和团队成员沟通的过程中,我发现许多人并不是不够努力,而是不知道往哪个方
向努力。或者说,不知道应该如何努力,才能更快地成长。有些人认为已经掌握的技能足够解决目前的问题,就开始懈怠,或者开始焦虑。大家不知道自己处于技能
树的那个级别,也不知道下一步应该爬往哪个方向。
于是,培训,尤其是系统的培训计划就相当重要。我根据手机游戏客户端技术的特点编写了一个技能树:
然后,根据这个技能树,我设计了一套完善的方法支持技能树的实施。
5.1 质量控制系统¶
要保证每个开发者对技能点的理解都达到相同的高度,必须严格确保技能点的实施质量,以及培训的质量。设计中有这样几个级别来控制质量:
5.1.1 守门员(Gatekeeper)
守门员是培训质量和代码质量的最终把关者,整个技能树的实施质量取决于守门员的能力。整个系统设置 1~3 个守门员。
5.1.2 合作者(Collaborator)
在技能树繁茂的枝叶(知识领域)中,不是所有的人都能对整个体系完整深入地进行了解。在团队的所有的程序员中,总有人对某些枝叶特别熟悉,这些人就是合作者。
合作者是某个领域的专家,他们需要根据技能树中的枝叶制定这个领域的培训计划,需要审核具体领域实施过程的代码,并保证代码的质量,保证培训计划的完整深入。
5.1.3 执行者(Executor)
执行者可以是合作者,也可以由合作者来指定。执行者负责具体的代码编写和培训授课。合作者负责执行者的培训计划的质量。合作者是执行者的导师,执行者是合作者的接班人。
在技能树的实施过程中,执行者负责具体的培训授课,以及具体技能点的质量监控,是整个技能树实施中的 最大受益者 ,是整个技能树实施过程中 成长最快的人 。
5.1.4 学习者(Student)
在一个技能点的实施过程中,学习者需要面对培训做出反馈,将培训中学习到的知识用于工作中。学习者是整个技能树实施的 最直接的受益者 。
学习者的身份不是绝对的。在某个知识领域的学习者,可能是另一个知识领域的执行者、合作者,甚至守门员。这取决于学习者的 成长链 。
5.2 培训和执行
技能掌握和 Level 提升需要完善的培训计划和强大的执行力。培训计划的制定流程如下:
守门员确定合作者的知识领域;
合作者基于现有项目选择开始点;
合作者选择执行者,共同制定详细的培训文案和计划;
在执行开始之前,使用培训来统一执行标准,由执行者进行培训;
在执行阶段,执行者、合作者需要通过 Code review 和其他方式确保执行效果;
合作者确定该领域培训成功,总结会议;
进入该知识领域中的下一个技能点,继续上述流程。
对于技能点的知识领域的选择,必须遵循以下三个原则:
尽量在现有正在进行的项目中选择培训内容,确定计划起始点。现有项目的框架、功能、公用库、流程等等都可以起始点;
若1不满足,则应考虑现有项目的开发方向,基于现有项目的升级版本确定计划的起始点;
若2不满足,则起始点选择必须基于可实际操作的项目,不允许空中楼阁,不允许只谈方法没有实战;不允许试验性的无意义项目;所有选择的项目必须有实际意义;选择的项目,要么可以直接作为一个新项目的起点,要么可以 作为旧项目升级的方向。
5.3 培训类型
技能树的培训分为三类:
5.3.1 所有开发者都需要掌握的
例如 markdown 和 sphinx 这类培训。这类技能非常简单和容易掌握,而且在今后的工作甚至生活中,可以为每个开发者带来好处。这类培训会安排详细的练习;
5.3.2 所有人都需要了解,但不需要完全掌握的
程序员分为两种,一种喜欢偷懒,偏爱使用各种工具或者自己开发工具偷懒,另一种则喜欢实现功能,按部就班地开发。
cmake 这类培训就是能让这两种程序员都达到自己目的的培训。
对 于第一种程序员,听完课程之后就会自行去搜索更深的信息,进行了解;而对于第二种程序员,培训需要达到的效果是他在下次看到 CMakeLists.txt 的时候不发怵,碰到 CMake 错误的时候能知道怎么找到相关信息解决即可。这类培训不会安排练习,或者安排不强制的练习。
5.3.3 所有开发者都要严格熟悉的¶
这就是和项目的开发流程、开发框架相关的内容。对于这些内容,许多开发者并不熟悉,由于没有统一的培训,程序员们完全是按照自己的本能在开发,这导致了代码风格不统一,代码质量不一致,重复早轮子等许多问题。这部分的培训,是和 入职培训 类似的内容,目的就在于解决上面提到的问题。
lerna 框架的系列培训,就属于这类培训。这类培训会严格安排联系并检查,保证学习者对这些内容的完全掌握。
5.4 层层递进的培训进程
当学习者的水平并不在同一个层级的时候,技能树培训系统只能进行 “浅尝即止” 的培训。只有将所有学习者的水平都拉高到平均值之后,才可能进行更深入的内容培训。到那个时候,培训不应该是 “大锅饭” 式的,而是可能多个主题同时开讲。到那个时候,每个学习者也都会了解了自己的特点,确定了自己的成长链,并安排好了自己的成长方向。
上面这部分内容是 客户端技能树 一文的摘录。
所有的培训内容、文档、PPT 和源码都是通过 git 管理的。主要文档使用 Sphinx 写成,所有团队成员一起维护,所有的培训都有记录。绝大部分培训都有练习。每个人都可以是合作者、执行者和学习者。
采用这种方式,我可以直接在技能树培训的过程中,顺便把入职培训的内容也做了。后面进入团队的新人,可以直接 无缝接入 这套培训系统。
因为培训的内容都在内网,这里给出两张截图:
6. 拉动其他团队
在游戏公司里,前端团队是非常特殊的存在。前端是产品从设计到成果的最终一环,玩家能直接体验到前端团队的成果。一个优秀的产品,必须是由一个优秀的前端团队打造出来的。
我一直认为一个优秀的手机游戏前端程序员必须做到以下几点:
能指导美术团队按照客户端的优化需求切图;
能给UI/UX团队提出靠谱的修改建议;
能根据技术特点与商务团队沟通的SDK接入策略;
能根据各OS平台特点和运营团队讨论推广策略;
能根据客服团队需求设计更方便的反馈模块;
能制订通信编码协议(必须是客户端制订);
能与服务端团队讨论性能和优化策略;
……
做
到这些并不容易。前端程序员不但要熟悉美术工具,对各种媒体格式了如指掌,还必须了解UI和UX的基本知识,并将其运用到最终产品中;程序员要了解商务和
运营的各种术语,要学会查看各种运营报表,从中分析出产品在前端方面的问题;程序员还要熟悉各种网络通信协议,要了解服务端开发的特点,要熟悉数据库、服
务器性能,熟悉移动网络的特点,才能做到和服务端团队协同配合提升游戏的网络体验。
可是,大多数客户端程序员都不擅长做上面的工作。然后我可以反其道而行之,让其他团队了解一些客户端的工作。
我
发现其他团队在制订操作方案的时候,并没有过多地考虑手机游戏的特点。这并非是由于他们不想做到更好,而是不知道我们前端团队能做到哪一步。和前端团队一
样,其他团队也是对自己团队的工作范围熟悉,对其他团队的工作不熟悉。如果我们可以让大家互相多了解一些,那么在涉及到多个团队协作的部分,效率就会更
高。
例如界面切图工作。美术同学切图可能不会考虑共享资源的重用,以及scale9等技巧,由于不了解界面在游戏中如何分割,图像文件的
分类也不一定合理。而由于客户端程序员对PS等工具并不熟悉,也无法提出合理的修改意见。最终导致的结果就是美术素材浪费了内存和增大了最终包体积,或者
客户端团队需要对美术资源进行二次修改才能使用。
要提高这部分工作效率,我采用的方式是让了解美术的前端程序员和美术团队一起工作,了解具体的切图流程,在切图过程中确定一些常用的规则,并让美术团队了解这样做的目的。一来二去,美术团队对客户端的需求会越来越了解,资源返工的可能性就越来越小了。
再
比如,商务团队在和渠道谈SDK接入的时候,会涉及到一些技术问题,而渠道方负责合作的人员往往并不是技术人员,此时和我们客户端团队对接就会出现问题。
如果商务团队了解一些接入的基本规则和技术术语,在和渠道方合作的时候,就能够更加得心应手地处理沟通问题,为客户端团队节省了大量的沟通时间。
7. 团队文化
文化有非常浓厚的个人烙印。一个公司的文化,一定有浓厚的创始人风格。而一个团队的文化,则反映着Leader的特点。
在创业时,我从无到有完整地打造了公司行政、人事流程和公司文化。而现在,我更希望按照公司特点打造一个高效的客户端团队。
文化是对共同价值观的认同。没有共同的价值观,也就没有共同的文化。我希望的团队文化必须是轻松的,有趣的,发展的,共赢的。
团队文化的建设即是实实在在的,又是潜移默化的。我们可以从日常的团建工作中找到突破口。所有这类工作,必须让所有人一起参与。比如我们团队上一次团建的内容这就是这么定下来的:
这是我发的第一封开脑洞邮件:
Hi all:
我们客户端团队要搞一次团建活动,请大家开一下脑洞。
唱歌就不必了,一群爷们木有妹子。
吃饭啥的有点 low,做备选方案吧
内容要有趣,大家都想参与
比如攀岩啥的,大家没搞过的在预算内的都可以搞搞
客户端共xx人,公司预算每人xxx,我再出xxx,大家按这个来计算。若再超过,大家 AA 多出的部分。
今天下班前,每人必须回复。
没想法的请回复: “没想法” ,然后 AA 的时候出2倍。
期间,给一些合适的引导:
Hi game client:
LHJ制作人JY同学组织了一群乌合之众试图与我们在网吧一争高下,请大家准备好,给他们点 color 瞧瞧,让他们知道游戏是用键盘敲出来 DI !!!!
@JX,是不是可以设计点彩头哇……
经过了十几轮邮件轰炸之后,结果变成了这样:
Hi all:
投票结果已经出来了,见附件。
可以看出,69%的同学选择网吧游戏,46%的同学选择吃饭。那么我们这次就搞 网吧游戏+吃饭 的团建吧!运动也有不少同学选择,我们在下次团建考虑。
时间上,由于必须在 12月31日前完成,我选了3个时间点。54%的同学选择了圣诞节当天,那么我们就定这个时间。
团建本来是轻松的事情。但开放式讨论必须有人收尾。就像我初中时团支书说的那样:既要民主,也要集中。按大家的兴趣点把时间地点人物确定,整件事儿基本上就可以愉快地开始了!这次团建大家都是蛮Happy的:客户端团队圣诞团建回顾--我们的快乐与大家分享!
团建仅仅是团队文化建设的一部分。更多的文化建设是潜移默化进行的。例如在上面提到的培训过程中,合作者与执行者的交流,每次授课之前的小范围试讲;再例如
根据每个程序员的特点安排不同的工作,安排不同项目之间的经验交流;还有让团队中每一个成员都了解自己的位置和发展方向,都知道碰到某些问题的时候应该找
哪位成员询问等等。这些看似平常,但都是文化建设的重点。
团队文化建设的前提,就是Leader要充分了解团队成员,知道每个人的喜好和特点,还要保持鲜明的个人风格,并把自己的风格与团队成员特点,公司风格融合起来。这样建立起来的团队文化,才是经得起考验的,才是能帮助团队成长的,才是能和公司一同进步的。
8. 积累
想要做一个称职的 Leader,积累是至关重要的。
在技术经验上,你的积累能够帮助你的团队快速解决棘手的问题。当然,这是技术 Leader 的基本功。我说一点技术之外的积累。
8.1 谈话
一对一谈话是了解团队成员想法的重要手段。上面谈到的对团队成员兴趣的了解,大多数都是通过一对一谈话来完成的。谈话的内容要实时做好记录,并做好对每次谈话的结果分析。
下面是我做的一个典型谈话分析。包括谈话内容,对于普遍情况的总结,以及对于特殊情况的描述,最后包括解决这些问题的可选方案。
只有记录了每一次谈话的内容,才能在下次谈话的时候根据原来的记录做出合理的比较,看看哪些人进步了,哪些人的方向变化了,然后继续寻找更合适的方法。
8.2 人事
人才和面试,是团队成长和建设的重中之重。上面我专门用了两个独立的章节来讲。
我对所有经手的面试和离职都
会做好记录。在有员工离职时,我可以通过对比分析其他员工的离职原因,看看到底是因为干得不爽还是钱没给够。每个优秀员工的离职,对团队都会有一定的影
响,对我的工作也是一个考验。如果能够在离职之前发现问题所在,有针对性的进行工作的调整和团队建设,无论对团队来讲还是对离职员工来讲,都是件好事。
所有的面试资料中都包含简历资料,在一个新员工入职后,我可以通过 TA 的表现,慢慢去印证当时的面试有哪些偏差,是否出现了判断错误,把一个优秀的求职者放弃了?还是看走了眼,招入了一个平庸的人?
8.3 GTD
大多数公司都会使用邮件来管理和发布工作。但邮件并不是进行工作管理的好工具。为了方便分析和整理,我会把每天的工作记录下来。这些工作包括一些重要的邮件,讨论和会议,还有一些就是日常的杂事。
有了每日工作记录,就很容易写出周报和月报并作出总结。一些比较独立的事件,并不放在日报中,而是将它们进行单独记录,再以链接的形式将其加入到每日工作记录中。每月结束的时候,回顾一下这些记录,对下个月的工作安排有极大的指导意义。
9. 结语
本来准备随便写写的,一不小心就写成了工作汇报。谈不上经验,就是胡扯而已。就像我在 游戏逻辑程序员的成长出路? - 曾嵘的回答 里面说的那样:
如果你所处的是有 HR 有网管有安全部门有运维部门有扫地大妈的公司。就当我放屁好了。
我现在就在有 HR 有网管有安全部门有运维部门有扫地大妈的公司。
所以你们就当我放屁好了。
(放完了)
使用 阅读原文 可以查看文中链接。
=====
黑斑马团队
黑斑马团队的核心成员都来自微软、趋势、Oracle、腾讯、百度、阿里、盛大、网易、完美等一线互联网公司或游戏公司。我们非常欢迎湖北籍的在一线城市的优秀游戏公司打拼的优秀人才加入我们。
曾嵘胡扯的地方